package com.leshowski.agendaUCV2.twitter.principal;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.leshowski.agendaUCV2.comun.Google;
import com.leshowski.agendaUCV2.comun.ManejaEventosAgenda;
import com.leshowski.agendaUCV2.comun.ManejaProperties;
import com.leshowski.agendaUCV2.modelo.EventoAgenda;
import com.leshowski.agendaUCV2.modelo.Fecha;
import com.leshowski.agendaUCV2.twitter.control.ManejaTwitter;

public class EjecutaTwitter {
	
	public static void main(String[] args) throws Exception {
		
		Logger log = Logger.getLogger(EjecutaTwitter.class);
		
		String rutaXML = ManejaProperties.entregaValor("com/leshowski/agendaUCV2/twitter/conf/rutas.properties", "rutaXML");
		String rutaPropertiesLog4j = "com/leshowski/agendaUCV2/twitter/conf/log4j.properties";
		
		PropertyConfigurator.configure(EjecutaTwitter.class.getClassLoader().getResource(rutaPropertiesLog4j));
		
		ManejaEventosAgenda manejaEventosAgenda = new ManejaEventosAgenda(rutaXML, rutaPropertiesLog4j);
		
		//obtiene el evento a publicar
		EventoAgenda eventoAgendaAPublicar = manejaEventosAgenda.obtieneEventoApublicar();
		
		//Publica el evento en facebook
		try{
			publicaEventoAgenda(eventoAgendaAPublicar, manejaEventosAgenda.getNroSecuencia(), manejaEventosAgenda.getFechaActual());
		}catch(Exception e){
			log.error("Error al publicar el evento en twitter:"+e);
		}
		
		//actualiza el XML fuente
		manejaEventosAgenda.actualizaXMLEventosAgenda();
	}
		
    public static void publicaEventoAgenda(EventoAgenda eventoAPublicar,int nroSecuencia,Fecha fechaActual) throws Exception{
		
		boolean continua = true;
		
		String aux="";
		
		//Se obtiene las variables necesarias para hacer la conexion con Twitter
		String consumerKey       = ManejaProperties.entregaValor("com/leshowski/agendaUCV2/twitter/conf/twitter.properties", "consumerKey");
		String consumerSecret    = ManejaProperties.entregaValor("com/leshowski/agendaUCV2/twitter/conf/twitter.properties", "consumerSecret");
		String accessToken       = ManejaProperties.entregaValor("com/leshowski/agendaUCV2/twitter/conf/twitter.properties", "accessToken");
		String accessTokenSecret = ManejaProperties.entregaValor("com/leshowski/agendaUCV2/twitter/conf/twitter.properties", "accessTokenSecret");
		
		//Se inicia el objeto que permite manejar Twitter
		ManejaTwitter manejaTwitter = new ManejaTwitter(consumerKey, consumerSecret, accessToken, accessTokenSecret);
		
		
		//agrega la URL corta de google
		if((eventoAPublicar.getUrlCorta()==null || eventoAPublicar.getUrlCorta().equals(""))&&
		   eventoAPublicar.getUrl()!=null && !eventoAPublicar.getUrl().equals("")){
			
			String urlCorta = Google.shorten(eventoAPublicar.getUrl());
			
			eventoAPublicar.setUrlCorta(urlCorta);
			
		}
		
		String respaldoMensaje = "";
		
		//Se le agrega la fecha al mensaje mas su correlativo para que no alegue twitter del post duplicado
		String mensaje = fechaActual.getDia()+"/"+fechaActual.getMes()+"/"+fechaActual.getAnio()+"-"+nroSecuencia;

		//Se agrega la URL corta y un comodin para agregar el titulo del evento
		mensaje = mensaje +". %t. %l. %h. %f. "+eventoAPublicar.getUrlCorta();
		
		//Agrega el t�tulo
		respaldoMensaje = mensaje;
		mensaje = mensaje.replace("%t", eventoAPublicar.getTitulo());
		
		if(mensaje.length()>140){
			continua = false;
			mensaje = respaldoMensaje;
			aux = (140-mensaje.length()-2<0?"..":eventoAPublicar.getTitulo().substring(0,140-mensaje.length()-2));
			mensaje = mensaje.replace("%t", aux);
		}
		
		if(continua){
		
			//Agrega el lugar
			respaldoMensaje = mensaje;
			mensaje = mensaje.replace("%l", eventoAPublicar.getLugar());
			
			if(mensaje.length()>140){
				continua = false;
				mensaje = respaldoMensaje;
				aux = (140-mensaje.length()-2<0?"..":eventoAPublicar.getLugar().substring(0,140-mensaje.length()-2));
				mensaje = mensaje.replace("%l", aux);
			}
		}
		
		if(continua){
			
			//Agrega el horario
			respaldoMensaje = mensaje;
			mensaje = mensaje.replace("%h", eventoAPublicar.getHorario());
			
			if(mensaje.length()>140){
				continua = false;
				mensaje = respaldoMensaje;
				aux = (140-mensaje.length()-2<0?"..":eventoAPublicar.getHorario().substring(0,140-mensaje.length()-2)); 
				mensaje = mensaje.replace("%h", aux);
			}
		}
		
		if(continua){
		
			//Agrega la fecha
			respaldoMensaje = mensaje;
			mensaje = mensaje.replace("%f", eventoAPublicar.getFecha());
			
			if(mensaje.length()>140){
				continua = false;
				mensaje = respaldoMensaje;
				aux = (140-mensaje.length()-2<0?"..":eventoAPublicar.getFecha().substring(0,140-mensaje.length()-2));
				mensaje = mensaje.replace("%f", aux);
			}
		}
		
		if(!continua){
			mensaje = mensaje.replace(" %t.", "");
			mensaje = mensaje.replace(" %l.", "");
			mensaje = mensaje.replace(" %h.", "");
			mensaje = mensaje.replace(" %f.", ". ");
		}
		
		manejaTwitter.publicaTweet(mensaje);
				
	}
}